package vista;

import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JPanel;

import modelo.tiempo.Tiempo;


public class HiloTiempo implements Runnable {
	
	private int ultimaHora;
	private String ultimoDia;
	private String lugar;
	private VistaPoliciaViajar vistaPoliciaViajar;
	private JLabel etiqueta;
	
	public HiloTiempo(int hora, String dia, String lugar, JLabel etiqueta, VistaPoliciaViajar vistaPoliciaViajar ){
		this.ultimaHora = hora;
		this.ultimoDia = dia;
		this.lugar = lugar;
		this.etiqueta = etiqueta;
		this.vistaPoliciaViajar = vistaPoliciaViajar;
	}
	public void run(){
		if (vistaPoliciaViajar != null && (vistaPoliciaViajar.estaViajando())) {
			this.mostrarTiempoCuandoViaja();
		}else{
			this.mostrarTiempoCuandoNoViaja();
		}
		
		/*try{
			Tiempo tiempo = Tiempo.obtenerInstancia();
			String dia = tiempo.obtenerDia();
			int hora = tiempo.obtenerHora();
			
			boolean desbloquearBotones = true;
			boolean estuvoDurmiendo = false;
			while (((ultimaHora != hora) || !(ultimoDia.equals(dia)))){
				estuvoDurmiendo = false;
				ultimaHora ++;
				if (ultimaHora>24){
					VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
					JPanel imagenPoliciaDurmiendo = new PanelImagenPoliciaDurmiendo("img/PoliciaDurmiendo.jpg");
					if (vistaPoliciaViajar != null && (vistaPoliciaViajar.estaViajando())) {
							VistaMenuPrincipal.obtenerInstancia().getPanelSupDer().add(imagenPoliciaDurmiendo, "vistaImagenPoliciaDurmiendo");
							VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaImagenPoliciaDurmiendo");
					}else {
						VistaMenuPrincipal.obtenerInstancia().getPanelInfIzq().add(imagenPoliciaDurmiendo, "vistaImagenPoliciaDurmiendo");
						VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaImagenPoliciaDurmiendo");
					}
					this.mostrarQueDuerme(estuvoDurmiendo);
				}
				if (((estuvoDurmiendo)&&(vistaPoliciaViajar == null)) || ((estuvoDurmiendo)&&(vistaPoliciaViajar !=null)&&(!(vistaPoliciaViajar.estaViajando())))) {
						VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");
				}
				etiqueta.setText(lugar + ". " + ultimoDia + ", " + ultimaHora  + " hs." );
				if (!(estuvoDurmiendo)){ 
				if ((vistaPoliciaViajar != null)&&(vistaPoliciaViajar.estaViajando())) {
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaPoliciaViajar");
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaPanelSuperiorDerechoDefault");
					vistaPoliciaViajar.dibujarTramo();
				}
				VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
				Thread.sleep(350);
				}
				if (this.perdio()) desbloquearBotones=false;
			}
			if (vistaPoliciaViajar != null) {
				if (!(vistaPoliciaViajar.estaViajando()))
				VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");
			}
			if (desbloquearBotones) VistaMenuPrincipal.obtenerInstancia().desbloquearBotones();
		}catch (InterruptedException e) {			
			e.printStackTrace();
		}*/
	}
	public String obtenerDiaSiguiente(String dia){
		ArrayList<String> dias = new ArrayList<String>();
		dias.add("Domingo");
		dias.add("Lunes");
		dias.add("Martes");
		dias.add("Miercoles");
		dias.add("Jueves");
		dias.add("Viernes");
		dias.add("Sabado"); 
		String diaSiguiente;
		int i=0;
		while (!(dias.get(i).equals(dia))){
				i++;
			}
		if (i !=6){
			diaSiguiente = dias.get(i+1);
		}else {
			diaSiguiente = dias.get(0);
		}
		return diaSiguiente;
	}
	
	private void mostrarQueDuerme(boolean estuvoDurmiendo){
		try{
			estuvoDurmiendo=true;
			ultimoDia = this.obtenerDiaSiguiente(ultimoDia);
			for (int i=1; i<9;i++){
				ultimaHora = i;
				etiqueta.setText(lugar + ". " + ultimoDia + ", " + ultimaHora  + " hs." + "(Durmiendo)");
				Thread.sleep(350);
			}
		}catch (InterruptedException e) {			
			e.printStackTrace();
		}
	}
	
	private boolean perdio(){
		boolean perdio = false;
		if ((ultimaHora > 16) && (ultimoDia.equals("Domingo"))) perdio = true;
		return perdio;
	}
	private void mostrarTiempoCuandoViaja(){
		try{
			Tiempo tiempo = Tiempo.obtenerInstancia();
			String dia = tiempo.obtenerDia();
			int hora = tiempo.obtenerHora();
		
			boolean desbloquearBotones = true;
			boolean estuvoDurmiendo = false;
			while (((ultimaHora != hora) || !(ultimoDia.equals(dia)))){
				estuvoDurmiendo = false;
				ultimaHora ++;
				if (ultimaHora>24){
					VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
					JPanel imagenPoliciaDurmiendo = new PanelImagenPoliciaDurmiendo("img/PoliciaDurmiendo.jpg");
					VistaMenuPrincipal.obtenerInstancia().getPanelSupDer().add(imagenPoliciaDurmiendo, "vistaImagenPoliciaDurmiendo");
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaImagenPoliciaDurmiendo");
					this.mostrarQueDuerme(estuvoDurmiendo);
				}
				etiqueta.setText(lugar + ". " + ultimoDia + ", " + ultimaHora  + " hs." );
				if (!(estuvoDurmiendo)){ 
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaPoliciaViajar");
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarSuperiorDerecho("vistaPanelSuperiorDerechoDefault");
					vistaPoliciaViajar.dibujarTramo();
					VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
					Thread.sleep(350);
				}
				if (this.perdio()) desbloquearBotones=false;
				
			}
			if (!(vistaPoliciaViajar.estaViajando()))
				VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");
			if (desbloquearBotones) VistaMenuPrincipal.obtenerInstancia().desbloquearBotones();
		} catch (InterruptedException e) {			
			e.printStackTrace();
		}
	}	
	private void mostrarTiempoCuandoNoViaja(){
		try{
			Tiempo tiempo = Tiempo.obtenerInstancia();
			String dia = tiempo.obtenerDia();
			int hora = tiempo.obtenerHora();
			
			boolean desbloquearBotones = true;
			boolean estuvoDurmiendo = false;
			while (((ultimaHora != hora) || !(ultimoDia.equals(dia)))){
				estuvoDurmiendo = false;
				ultimaHora ++;
				if (ultimaHora>24){
					VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
					JPanel imagenPoliciaDurmiendo = new PanelImagenPoliciaDurmiendo("img/PoliciaDurmiendo.jpg");
					VistaMenuPrincipal.obtenerInstancia().getPanelInfIzq().add(imagenPoliciaDurmiendo, "vistaImagenPoliciaDurmiendo");
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaImagenPoliciaDurmiendo");
					this.mostrarQueDuerme(estuvoDurmiendo);
				}
				if(estuvoDurmiendo){
					VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");
				}
				etiqueta.setText(lugar + ". " + ultimoDia + ", " + ultimaHora  + " hs." );
				if (!(estuvoDurmiendo)){ 
					VistaMenuPrincipal.obtenerInstancia().bloquearBotones();
					Thread.sleep(350);
				}
				if (this.perdio()) desbloquearBotones=false;
			}
			VistaMenuPrincipal.obtenerInstancia().setearPanelAMostrarInferiorIzquierdo("vistaInfoCiudad");
			if (desbloquearBotones) VistaMenuPrincipal.obtenerInstancia().desbloquearBotones();
		}catch (InterruptedException e) {			
			e.printStackTrace();
		}
	}
}
